package com.achen.utils;

import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;

import java.io.IOException;
import java.util.concurrent.TimeoutException;

/**
 * @author achen
 * @create 2021-07-25 3:00
 */
public class RabbitMQUtils {

    private static ConnectionFactory connectionFactory;

    /**
     * 因为连接属于比较消耗资源的对象，所以只需要创建一次即可
     * 只创建一次连接对象，在类加载的时候创建
     *
     * 静态代码块的作用：在类加载的时候执行，且只执行一次
     */
    static {
        //创建连接mq的连接工厂对象
        connectionFactory = new ConnectionFactory();

        //创建连接rabbitmq的主机
        connectionFactory.setHost("1.116.72.198");

        //设置端口号
        connectionFactory.setPort(5672);

        //设置连接哪个虚拟主机
        connectionFactory.setVirtualHost("/ems");

        //设置访问虚拟主机的用户名和密码
        connectionFactory.setUsername("ems");
        connectionFactory.setPassword("123");
    }

    //定义提供连接对象的方法
    public static Connection getConnection() {

        //获取连接对象
        try {
            Connection connection = connectionFactory.newConnection();
            return connection;
        } catch (IOException e) {
            e.printStackTrace();
        } catch (TimeoutException e) {
            e.printStackTrace();
        }
        return null;
    }

    //关闭通道和关闭连接123
    public static void closeConnectionAndChannel(Channel channel,Connection connection){
        try {
            if (channel != null){
                channel.close();
            }

            if (connection != null){
                connection.close();
            }
        } catch (IOException e) {
            e.printStackTrace();
        } catch (TimeoutException e) {
            e.printStackTrace();
        }
    }
}
